home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 7: Sunsite / Linux Cubed Series 7 - Sunsite Vol 1.iso / system / shells / scsh-0.4 / scsh-0 / scsh-0.4.2 / rts / lize.scm < prev    next >
Text File  |  1995-10-13  |  1KB  |  36 lines

  1. ; Copyright (c) 1993, 1994 Richard Kelsey and Jonathan Rees.  See file COPYING.
  2.  
  3.  
  4. ; Simplest rational within an interval.  Copied from IEEE P1178/D4 nimpl.tex.
  5.  
  6. (define (rationalize x e)
  7.   (let ((e (abs e)))
  8.     (simplest-rational (- x e) (+ x e))))
  9.  
  10. (define (simplest-rational x y)
  11.   (define (simplest-rational-internal x y)
  12.     ;; assumes 0 < X < Y
  13.     (let ((fx (floor x))
  14.           (fy (floor y)))
  15.       (cond ((not (< fx x))
  16.              fx)
  17.             ((= fx fy)
  18.              (+ fx
  19.         (/ 1 (simplest-rational-internal
  20.               (/ 1 (- y fy))
  21.               (/ 1 (- x fx))))))
  22.             (else
  23.              (+ 1 fx)))))
  24.   ;; Do some juggling to satisfy preconditions of simplest-rational-internal.
  25.   (cond ((not (< x y))
  26.          (if (rational? x) x (error "(rationalize <irrational> 0)" x)))
  27.         ((positive? x)
  28.          (simplest-rational-internal x y))
  29.         ((negative? y)
  30.          (- 0 (simplest-rational-internal (- 0 y) (- 0 x))))
  31.         (else
  32.          (if (and (exact? x) (exact? y))
  33.              0
  34.              (exact->inexact 0)))))
  35.  
  36.